/*
 * Auto generated C++ header for Mass Effect 2.
 *	by _silencer.
 */

#ifndef UNREAL_SDK_GAME_SFXOnlineFoundation_H
#define UNREAL_SDK_GAME_SFXOnlineFoundation_H

#include "unreal_game_global.h"

namespace game
{
	using namespace unreal;

	enum SFXOnlineEventStatus
	{
		SFXONLINE_EVENT_STATUS_NONE,
		SFXONLINE_EVENT_STATUS_PENDING,
	};

	enum SFXOnlineEventStatusFinished
	{
		SFXONLINE_EVENT_STATUS_FINISHED_SUCCESS,
		SFXONLINE_EVENT_STATUS_FINISHED_FAILED,
		SFXONLINE_EVENT_STATUS_FINISHED_CANCELED,
	};

	enum SFXOnlineEventType
	{
		SFXONLINE_EVENT_NONE,
		SFXONLINE_EVENT_TICK,
		SFXONLINE_EVENT_TIMER,
		SFXONLINE_EVENT_PLATFORM_CONTROLLERCHANGE = 1,
		SFXONLINE_EVENT_PLATFORM_CONTROLLERCHANGE = 2,
		SFXONLINE_EVENT_PLATFORM_CONTROLLERCHANGE = 3,
		SFXONLINE_EVENT_PLATFORM_CONTROLLERCHANGE = 4,
		SFXONLINE_EVENT_PLATFORM_CONNECT,
		SFXONLINE_EVENT_PLATFORM_DISCONNECT,
	};

	class SFXOnlineEvent: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXOnlineEvent, Object, SFXOnlineFoundation )

	public:

		Bool IsUnique: 1; //offset = 60, size = 4
		Bool TimeOutEnabled: 1; //offset = 60, size = 4
		Byte EventType; //offset = 64, size = 1
		Byte CurrentStatus; //offset = 65, size = 1
		Byte Outcome; //offset = 66, size = 1
		Int EventID; //offset = 68, size = 4
		Float TimeOut; //offset = 72, size = 4
		Int ErrorCode; //offset = 76, size = 4
		String ErrorString; //offset = 80, size = 12

		void Update( SFXOnlineEvent* oEvent );
		Bool IsComplete();
		Bool IsPending();
		Bool CompleteAndSucceeded();
		Bool HasTimedOut();
		Bool IsTimeoutEnabled();
		void DisableTimeout();
		void EnableTimeout();
		void SetTimeout( Float fEventTimeout );
		Float GetTimeout();
		void SetErrorString( String sMessage );
		String GetErrorString();
		void SetErrorCode( Int nCode );
		Int GetErrorCode();
		void SetStatus( Byte eNewStatus );
		Byte GetStatus();
		void SetOutcome( Byte eStatusFinished );
		Byte GetOutcome();
		void SetEventId( Int nNewEventId );
		Int GetEventId();
		void SetEventType( Byte eNewEventType );
		Byte GetEventType();
	};

	struct SFXOnlineSubscriberEventType
	{
		Byte EventType; //offset = 0, size = 1
		Name EventCallback; //offset = 4, size = 8
	};

	class SFXOnlineComponent: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXOnlineComponent, Object, SFXOnlineFoundation )

	public:

		Bool NeedsStateMachine: 1; //offset = 60, size = 4
		Name APIName; //offset = 64, size = 8
		SFXOnlineSubsystem* OnlineSubsystem; //offset = 72, size = 4
		Array<SFXOnlineSubscriberEventType> EventSubscriberTable; //offset = 76, size = 12
		__OnEvent__Delegate __OnEvent__Delegate; //offset = 88, size = 12

		Bool IsEventPending( Byte eEventType, Int nEventId );
		SFXOnlineEvent* GetEvent( Byte eEventType, Int nEventId );
		void WaitingForWorkSetObject( Array<SFXOnlineEvent*> aOnlineEventSet, fnWorkComplete fnWorkComplete );
		void WaitingForWorkSetType( Array<Byte> aWorkUnits, fnWorkComplete fnWorkComplete );
		void WaitingForWorkObject( SFXOnlineEvent* oEvent, fnWorkComplete fnWorkComplete );
		void WaitingForWorkType( Byte eWork, fnWorkComplete fnWorkComplete, Int nEventId );
		void NotifyWorkFinishedObject( SFXOnlineEvent* oEvent, Byte eStatusFinished );
		void NotifyWorkFinishedType( Byte eWork, Byte eStatusFinished, Int nEventId );
		void NotifyWorkStartedObject( SFXOnlineEvent* oEvent, Byte eEventType );
		void NotifyWorkStartedType( Byte eWork, Int nEventId, Float fTimeOut );
		void NotifyEventObject( SFXOnlineEvent* oEvent );
		void NotifyEventType( Byte eEventType, Byte eStatus, Byte eOutcome );
		void StopWaitingForAllWork( Object* oCallbackTarget );
		void UnsubscribeFromAllEvents( Object* oCallbackTarget );
		void UnsubscribeFromEvent( Byte oEventType, fnEventCallback fnEventCallback );
		void SubscribeToEvent( Byte eEventType, fnEventCallback fnEventCallback );
		void OnEvent( SFXOnlineEvent* oEvent );
		Name GetAPIName();
		void OnRelease();
		void OnInitialize( SFXOnlineSubsystem* oOnlineSubsystem );
		void SubscribeToEvents();
	};

	class SFXOnlineEvent_Integer: public SFXOnlineEvent
	{
		DECLARE_PACKAGE_CLASS( SFXOnlineEvent_Integer, SFXOnlineEvent, SFXOnlineFoundation )

	public:

		Int m_nInteger; //offset = 92, size = 4

		void SetInteger( Int nInteger );
		Int GetInteger();
	};

	class SFXOnlineEvent_String: public SFXOnlineEvent
	{
		DECLARE_PACKAGE_CLASS( SFXOnlineEvent_String, SFXOnlineEvent, SFXOnlineFoundation )

	public:

		String StringData; //offset = 92, size = 12

		void SetStringData( String sStringData );
		String GetStringData();
	};

	class SFXOnlineEvent_Notification: public SFXOnlineEvent_String
	{
		DECLARE_PACKAGE_CLASS( SFXOnlineEvent_Notification, SFXOnlineEvent_String, SFXOnlineFoundation )

	public:

		String m_sImageName; //offset = 104, size = 12
		Int m_nPriority; //offset = 116, size = 4

		void SetPriority( Int nPriority );
		Int GetPriority();
		void SetImageName( String sImageName );
		String GetImageName();
	};

	class SFXOnlineEvent_PlatformKeyboardUI: public SFXOnlineEvent
	{
		DECLARE_PACKAGE_CLASS( SFXOnlineEvent_PlatformKeyboardUI, SFXOnlineEvent, SFXOnlineFoundation )

	public:

		String Response; //offset = 92, size = 12
		Byte LocalUserNum; //offset = 104, size = 1
		String TitleText; //offset = 108, size = 12
		String DescriptionText; //offset = 120, size = 12
		String DefaultText; //offset = 132, size = 12
		Bool ShouldValidate: 1; //offset = 144, size = 4
		Bool RouteThroughConsole: 1; //offset = 144, size = 4
		Pointer ResponseBuffer; //offset = 148, size = 4
	};

	class SFXOnlineEventList: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXOnlineEventList, Object, SFXOnlineFoundation )

	public:

		Array<SFXOnlineEvent*> EventList; //offset = 60, size = 12

		SFXOnlineEvent* GetNextTimedOutEvent();
		Bool RemoveEvent( SFXOnlineEvent* oEvent );
		Int FindEventByType( Byte eEventType, Int nEventId );
		Int FindEvent( SFXOnlineEvent* oEvent );
		SFXOnlineEvent* GetEventAtIndex( Int nEventIndex );
		SFXOnlineEvent* GetEvent( SFXOnlineEvent* oEvent );
		Bool AddEvent( SFXOnlineEvent* oEvent );
	};

	class ISFXOnlineComponent: public Interface
	{
		DECLARE_PACKAGE_CLASS( ISFXOnlineComponent, Interface, SFXOnlineFoundation )

	public:

		Name GetAPIName();
		void OnRelease();
		void OnInitialize( SFXOnlineSubsystem* oOnlineSubsystem );
	};

	class ISFXOnlineComponentAchievement: public ISFXOnlineComponent
	{
		DECLARE_PACKAGE_CLASS( ISFXOnlineComponentAchievement, ISFXOnlineComponent, SFXOnlineFoundation )

	public:

		Bool IsGranted( String sAchievement );
		void Grant( String sAchievement );
	};

	class ISFXOnlineComponentAPI: public ISFXOnlineComponent
	{
		DECLARE_PACKAGE_CLASS( ISFXOnlineComponentAPI, ISFXOnlineComponent, SFXOnlineFoundation )

	public:
	};

	enum SFXOnlineConnectMode
	{
		SFXONLINE_CM_NONE,
		SFXONLINE_CM_IMPLICIT,
		SFXONLINE_CM_EXPLICIT,
	};

	struct SFXOnlineAccountCountryListItem
	{
		String ISOCode; //offset = 0, size = 12
		String Description; //offset = 12, size = 12
	};

	class ISFXOnlineComponentLogin: public ISFXOnlineComponent
	{
		DECLARE_PACKAGE_CLASS( ISFXOnlineComponentLogin, ISFXOnlineComponent, SFXOnlineFoundation )

	public:

		Byte GetConnectionState();
		Byte CanShowPresenceInformation( Int nUserIndex );
		Byte CanViewPlayerProfiles( Int nUserIndex );
		Byte CanPurchaseContent( Int nUserIndex );
		Byte CanDownloadUserContent( Int nUserIndex );
		Byte CanCommunicate( Int nUserIndex );
		Byte CanPlayOnline( Int nUserIndex );
		void EnterCDKey( String sKey );
		void OnDownloadOffersUICompleted();
		void OnDLCInfoLoaded();
		void OpenCerberusUI();
		Bool CheckEntitlement( String sGroup, String sTag );
		Bool IsCerberusMember();
		void DisablePersona( String sPersonaNonGrata );
		void CreatePersona( String sPersonaName );
		void SelectPersona( String sPersonaName );
		void AcceptTOS( Bool bAccepted );
		void Disconnect();
		void SubmitStore( Array<Int> aiChosen );
		void SubmitCreateNucleusAccountEx( String sEmail, String sPassword, Bool bEAProducts, Bool bThirdParty, Bool bBioWareProducts, String i_sCountryCode, Int BirthDay, Int BirthMonth, Int BirthYear, String i_sLanguageCode, Bool bSubmit );
		void SubmitEmailPasswordMismatch( String Email, String Password, Int eReturnCode );
		void SubmitMessageBox( Int eReturnCode );
		void SubmitRedeemCode( Bool bContinue, String i_sCode );
		void SubmitCerberusWelcomeMessage();
		void SubmitCerberusIntro( Int eReturnCode );
		void SubmitNucleusWelcomeMessage();
		void SubmitCreateNucleusAccount( String sEmail, String sPassword, Bool bEAProducts, Bool bThirdParty, Bool bBioWareProducts, Bool bSubmit );
		void SubmitParentEmail( Bool bContinue, String ParentEmail );
		void SubmitNucleusLogin( String Email, String Password, Byte eReturnCode );
		void SubmitIntroPage( Bool bContinue, Bool bSimulated );
		void Connect( Byte connectMode );
		void GoBackInUI();
		void Cancel();
		UniqueNetId GetUserId();
		String GetPersonaName();
		Bool IsSignedIn();
		Bool IsConnected();
		void SwitchActiveUserIndex( Int nNewIndex );
		Int GetActiveUserIndex();
		Byte GetLoginStatus();
	};

	enum SFXOnlineNotificationOfferPurchaseStatus
	{
		SFXONLINE_NOTIFICATION_PURHASE_UNKNOWN,
		SFXONLINE_NOTIFICATION_PURHASE_COMPLETED,
	};

	enum SFXOnlineNotificationPriority
	{
		SFXONLINE_NOTIFICATION_PRIORITY_CERBERUS_CONTENT,
		SFXONLINE_NOTIFICATION_PRIORITY_NEW_UNLOCK,
		SFXONLINE_NOTIFICATION_PRIORITY_SOON_DLC,
		SFXONLINE_NOTIFICATION_PRIORITY_MOTD,
	};

	struct SFXOnlineTargetOfferInfo
	{
		String offerType; //offset = 0, size = 12
		String offerId; //offset = 12, size = 12
	};

	struct SFXOnlineEntitlementGroupInfo
	{
		String GroupName; //offset = 0, size = 12
		String entitlementName; //offset = 12, size = 12
	};

	struct SFXOnlineDLCInfo
	{
		Int internalId; //offset = 0, size = 4
		SFXOnline_OfferID externalId; //offset = 4, size = 8
		String Name; //offset = 12, size = 12
		String Description; //offset = 24, size = 12
		Int Price; //offset = 36, size = 4
		String entitlementGroup; //offset = 40, size = 12
		String entitlementName; //offset = 52, size = 12
		String grantEntitlementGroup; //offset = 64, size = 12
		String grantEntitlementName; //offset = 76, size = 12
		String Image; //offset = 88, size = 12
		String offerKey; //offset = 100, size = 12
		Bool isEntitled: 1; //offset = 112, size = 4
	};

	class ISFXOnlineComponentNotification: public ISFXOnlineComponent
	{
		DECLARE_PACKAGE_CLASS( ISFXOnlineComponentNotification, ISFXOnlineComponent, SFXOnlineFoundation )

	public:

		SFXOnlineTargetOfferInfo GetTargetOfferInfo( Byte nSource );
		Byte HasUserPurchasedAnOffer( SFXOnline_OfferID aOfferId );
		Bool DownloadOffers( Array<SFXOnline_OfferID> aOfferIds );
		String GetOfferKeyIfEntitled( Int internalId );
		Array<SFXOfferDescriptor> GetGrantingOffers();
		Array<SFXOfferDescriptor> GetEntitledDLCInfo();
		void RefreshEntitlementFlags();
		Array<SFXOnlineEntitlementGroupInfo> GetEntitlementGroups();
		Int GetDaysSinceCerberusRegistration();
		Bool IsCalendarUnlockEarned( Int nDay );
		void RequestServerInfo();
		void RequestData();
	};

	class ISFXOnlineComponentPlatform: public ISFXOnlineComponent
	{
		DECLARE_PACKAGE_CLASS( ISFXOnlineComponentPlatform, ISFXOnlineComponent, SFXOnlineFoundation )

	public:

		Bool GetOnlineXuid( Int nUserIndex, UniqueNetId oUserXuid );
		Bool GetOfflineXuid( Int nUserIndex, UniqueNetId oUserXuid );
		Bool AddRecentPlayer( UniqueNetId oPlayerId, String sDescription );
		Bool ShowKeyboardUI( Byte byLocalUserNum, String sTitleText, String sDescriptionText, Bool bShouldValidate, Bool bRouteThroughConsole, String sDefaultText, Int nMaxResultLength );
		Bool ShowAchievementsUI( Byte byLocalUserNum );
		Bool ShowFeedbackUI( Byte byLocalUserNum, UniqueNetId oPlayerId );
		Bool ShowGamerCardUI( Byte byLocalUserNum, UniqueNetId oPlayerId );
		Bool ShowFriendsInviteUI( Byte byLocalUserNum, UniqueNetId oPlayerId );
		Bool ShowFriendsUI( Byte byLocalUserNum );
		Byte CanShowPresenceInformation( Byte byLocalUserNum );
		Byte CanViewPlayerProfiles( Byte byLocalUserNum );
		Byte CanPurchaseContent( Byte byLocalUserNum );
		Byte CanDownloadUserContent( Byte byLocalUserNum );
		Byte CanCommunicate( Byte byLocalUserNum );
		Byte CanPlayOnline( Byte byLocalUserNum );
		void SetRichPresence( Byte byLocalUserNum, Int nPresenceMode, Array<LocalizedStringSetting> aLocalizedStringSettings, Array<SettingsProperty> aProperties );
		Bool ShowLoginUI( Bool bShowOnlineOnly );
		Byte GetLoginStatus( Byte byLocalUserNum );
	};

	class ISFXOnlineComponentUserInterface: public ISFXOnlineComponent
	{
		DECLARE_PACKAGE_CLASS( ISFXOnlineComponentUserInterface, ISFXOnlineComponent, SFXOnlineFoundation )

	public:

		void ShowStore( Array<SFXOfferDescriptor> aOffers );
		void HasCerberusDLC( Bool bVal );
		void OnDisplayNotification( Byte Type, String MessageData, String Title, String Image );
		void ClearNotifications();
		void CloseEANetworking();
		void SetState( Byte eState );
		void ShowEmailPasswordMismatch( String Email, String Password );
		void ShowMessageBox( String sTitle, String sMessage, String sButton1Text, String sButton2Text, String sButton3Text );
		void ShowCreateNucleusAccountEx( String sEmail, String sPassword, Bool bEAProducts, Bool bThirdParty, Bool bBioWareProducts, String i_sCountryCode, Int BirthDay, Int BirthMonth, Int BirthYear, String i_sLanguageCode, Array<String> m_CountryCodeList, Array<String> m_CountryDisplayList );
		void ShowCerberusWelcomeMessage();
		void ShowRedeemCode();
		void ShowCerberusIntro();
		void ShowNucleusWelcomeMessage();
		void ShowCreateNucleusAccount( String sEmail, String sPassword, Bool bEAProducts, Bool bThirdParty, Bool bRegisterProduct, Bool bBioWareProducts, Bool bUnderage );
		void ShowParentEmail();
		void ShowAccountDemographics( Array<String> m_CountryCodeList, Array<String> m_CountryDisplayList );
		void ShowTermsOfService( String i_sTermsOfService, Bool bTOSChanged );
		void ShowNucleusLogin( String Email, String Password, Int eScreenState );
		void ShowIntroPage();
	};

	enum SFXOnlinePurchaseSource
	{
		SFXONLINE_PS_CERBERUS_MAIN,
		SFXONLINE_PS_SHOW_LIVE_CONTENT,
		SFXONLINE_PS_DLC_AVAILABLE,
	};

	enum SFXOnlineConnection_MessageType
	{
		SFXONLINE_MT_NORMAL,
		SFXONLINE_MT_DOWNLOAD_PROMPT,
	};

	enum SFXOnlineConnectionState
	{
		SFXONLINE_CONNECTIONSTATE_NONE,
		SFXONLINE_CONNECTIONSTATE_NUCLEUS_CONNECTING,
		SFXONLINE_CONNECTIONSTATE_NUCLEUS_CONNECTED,
		SFXONLINE_CONNECTIONSTATE_CERBERUS_CONNECTING,
	};

	struct SFXOnline_OfferID
	{
		Int nHigh; //offset = 0, size = 4
		Int nLow; //offset = 4, size = 4
	};

	struct SFXOfferDescriptor
	{
		String Name; //offset = 0, size = 12
		String Description; //offset = 12, size = 12
		Int Price; //offset = 24, size = 4
		String Image; //offset = 28, size = 12
		Bool UserHasIt: 1; //offset = 40, size = 4
		String grantEntitlementName; //offset = 44, size = 12
		String grantEntitlementGroup; //offset = 56, size = 12
		Int internalId; //offset = 68, size = 4
		SFXOnline_OfferID externalId; //offset = 72, size = 8
	};

	class SFXOnlineDefine: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXOnlineDefine, Object, SFXOnlineFoundation )

	public:
	};

	struct SFXOnlineEventNotify
	{
		Array<Subscribers> Subscribers; //offset = 0, size = 12
		Array<Waiters> Waiters; //offset = 12, size = 12
	};

	class SFXOnlineComponentCoordinator: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXOnlineComponentCoordinator, Object, SFXOnlineFoundation )

	public:

		Pointer VfTable_IISFXOnlineComponent; //offset = 60, size = 4
		SFXOnlineEventNotify OnlineEventNotifyTable[17]; //offset = 64, size = 24
		SFXOnlineEventList* EventList; //offset = 472, size = 4
		__OnEvent__Delegate __OnEvent__Delegate; //offset = 476, size = 12

		Name GetAPIName();
		void OnRelease();
		void OnInitialize( SFXOnlineSubsystem* oOnlineSubsystem );
		void StopWaitingForAllWork( Object* oCallbackTarget );
		void WaitingForWorkSetObject( Array<SFXOnlineEvent*> aEventObjects, fnWorkComplete fnWorkComplete );
		void WaitingForWorkSetType( Array<Byte> aEventTypes, fnWorkComplete fnWorkComplete, Array<Int> aWorkEventIds );
		void WaitingForWorkObject( SFXOnlineEvent* oEvent, fnWorkComplete fnWorkComplete );
		void WaitingForWorkType( Byte eEventType, fnWorkComplete fnWorkComplete, Int nEventId );
		Bool IsEventPending( Byte eEventType, Int nEventId );
		SFXOnlineEvent* GetEvent( Byte eEventType, Int nEventId );
		void UnsubscribeFromAllEvents( Object* oCallbackTarget );
		void UnsubscribeFromEvent( Byte eEventType, fnEventCallback fnEventCallback );
		void SubscribeToEvent( Byte eEventType, fnEventCallback fnEventCallback );
		void NotifyWorkFinishedObject( SFXOnlineEvent* oEvent, Byte eStatusFinished );
		void NotifyWorkFinishedType( Byte eEventType, Byte eStatusFinished, Int nEventId );
		void NotifyWorkStartedObject( SFXOnlineEvent* oEvent, Byte eEventType );
		void NotifyWorkStartedType( Byte eEventType, Int nEventId, Float fTimeOut );
		void NotifyEventObject( SFXOnlineEvent* oEvent );
		void NotifyEventType( Byte eEventType, Byte eStatus, Byte eOutcome );
		void OnTick( SFXOnlineEvent* oEvent );
		void OnEvent( SFXOnlineEvent* oEvent );
	};

	enum SFXOnlineComponentType
	{
		SFXONLINE_COMPONENT_TYPE_COORDINATOR,
		SFXONLINE_COMPONENT_TYPE_ONLINE_UI,
		SFXONLINE_COMPONENT_TYPE_PLATFORM,
		SFXONLINE_COMPONENT_TYPE_ONLINE_API,
		SFXONLINE_COMPONENT_TYPE_LOGIN,
		SFXONLINE_COMPONENT_TYPE_LEADERBOARD,
		SFXONLINE_COMPONENT_TYPE_STATS,
		SFXONLINE_COMPONENT_TYPE_ACHIEVEMENT,
		SFXONLINE_COMPONENT_TYPE_PLAYGROUP,
		SFXONLINE_COMPONENT_TYPE_MATCH_MAKER,
	};

	struct SFXOnlineComponentDescription
	{
		Class* ClassName; //offset = 0, size = 4
		Name PlatformName; //offset = 4, size = 8
		Byte ComponentType; //offset = 12, size = 1
	};

	struct SFXOnlineAchievement
	{
		String AchievementName; //offset = 0, size = 12
		Int Xbox360Id; //offset = 12, size = 4
	};

	class SFXOnlineSubsystem: public OnlineSubsystem
	{
		DECLARE_PACKAGE_CLASS( SFXOnlineSubsystem, OnlineSubsystem, SFXOnlineFoundation )

	public:

		Int GameListenPort; //offset = 136, size = 4
		String GameProtocolVersion; //offset = 140, size = 12
		Int MaxPlayerCount; //offset = 152, size = 4
		Int MaxObserverCount; //offset = 156, size = 4
		Int ReserveTimeOut; //offset = 160, size = 4
		Int GameNetworkTimeOutMS; //offset = 164, size = 4
		Array<SFXOnlineAchievement> AchievementList; //offset = 168, size = 12
		Bool SuggestPersonaNames: 1; //offset = 180, size = 4
		Array<String> SuggestPersonaNameKeywords; //offset = 184, size = 12
		Array<SFXOnlineComponentDescription> ComponentClassList; //offset = 196, size = 12
		OnlineComponentList OnlineComponentList[18]; //offset = 208, size = 8
		SFXOnlineEvent* TickEvent; //offset = 352, size = 4
		Pointer PlatformOnlineGameCallbackManager; //offset = 356, size = 4
		String OnlineUIClass; //offset = 360, size = 12

		Bool ShowConsoleRoutedKeyboardUI( Byte eLocalUserNum, String sTitleText, String sDescriptionText, Bool bIsPassword, Bool bShouldValidate, String sDefaultText, Int nMaxResultLength );
		Bool ShowKeyboardUI( Byte eLocalUserNum, String sTitleText, String sDescriptionText, Bool bIsPassword, Bool bShouldValidate, String sDefaultText, Int nMaxResultLength );
		String FormatTime( Float fInSeconds, Bool bShowHours, Bool bShowMins );
		Bool CheckEntitlement( String sGroup, String sTag );
		Bool IsCerberusMember();
		UniqueNetId GetUniqueIdFromConnection( PlayerReplicationInfo* oPRI );
		String MD5HashString( String InStr );
		String GetProjectID();
		String GetCDKey();
		String GetLanguage();
		Name GetPlatform();
		void ShutDown();
		Bool NativeInit();
		Int GetGameListenPort();
		Int GetReserveTimeout();
		Int GetMaxObserverCount();
		Int GetMaxPlayerCount();
		void SetMaxPlayerCount( Int nMaxPlayers );
		String GetGameProtocolVersion();
		ReturnValue GetComponentNotification();
		SFXOnlineComponentCoordinator* GetCoordinator();
		ReturnValue GetComponentUserInterface();
		ReturnValue GetComponentLogin();
		ReturnValue GetComponentAPI();
		ReturnValue GetComponentAchievement();
		ReturnValue GetComponentPlatform();
		String StripBadPWCharacters( String sPassword, String sStrippedPassword, Int nIndex, String sBuffer );
		String GetURL(, String sURL );
		void CreateComponents( Name nmPlatformName, Int nComponentIndex );
		void InitGameProtocolVersion();
		Bool Init();
		Array<SFXOnlineAchievement> GetAchievementList();
	};

	class SFXOnlineComponentPlatformPC: public SFXOnlineComponent
	{
		DECLARE_PACKAGE_CLASS( SFXOnlineComponentPlatformPC, SFXOnlineComponent, SFXOnlineFoundation )

	public:

		Pointer VfTable_IISFXOnlineComponentPlatform; //offset = 100, size = 4

		Bool GetOnlineXuid( Int nUserIndex, UniqueNetId oPlayerXuid );
		Bool GetOfflineXuid( Int nUserIndex, UniqueNetId oPlayerXuid );
		Bool ShowKeyboardUI( Byte LocalUserNum, String sTitleText, String sDescriptionText, Bool bShouldValidate, Bool bRouteThroughConsole, String sDefaultText, Int nMaxResultLength );
		Bool ShowFriendsInviteUI( Byte eLocalUserNum, UniqueNetId oPlayerXuid );
		Bool ShowFriendsUI( Byte eLocalUserNum );
		Bool ShowAchievementsUI( Byte byLocalUserNum );
		Bool ShowFeedbackUI( Byte eLocalUserNum, UniqueNetId oPlayerId );
		Bool ShowGamerCardUI( Byte eLocalUserNum, UniqueNetId oPlayerId );
		Byte CanShowPresenceInformation( Byte eLocalUserNum );
		Byte CanViewPlayerProfiles( Byte eLocalUserNum );
		Byte CanPurchaseContent( Byte eLocalUserNum );
		Byte CanDownloadUserContent( Byte eLocalUserNum );
		Byte CanCommunicate( Byte eLocalUserNum );
		Byte CanPlayOnline( Byte eLocalUserNum );
		void SetRichPresence( Byte eLocalUserNum, Int nPresenceMode, Array<LocalizedStringSetting> aLocalizedStringSettings, Array<SettingsProperty> aProperties );
		Bool ShowLoginUI( Bool bShowOnlineOnly );
		Byte GetLoginStatus( Byte eLocalUserNum );
		Bool AddRecentPlayer( UniqueNetId oPlayerId, String sDescription );
		Name GetAPIName();
		void OnRelease();
		void OnInitialize( SFXOnlineSubsystem* oOnlineSubsystem );
	};

	class SFXOnlineComponentAchievementXenon: public Object
	{
		DECLARE_PACKAGE_CLASS( SFXOnlineComponentAchievementXenon, Object, SFXOnlineFoundation )

	public:

		Pointer VfTable_IISFXOnlineComponentAchievement; //offset = 60, size = 4
		SFXOnlineSubsystem* OnlineSubsystem; //offset = 64, size = 4

		Name GetAPIName();
		void OnRelease();
		void OnInitialize( SFXOnlineSubsystem* oOnlineSubsystem );
		Bool IsGranted( String sAchievement );
		void Grant( String sAchievement );
	};

	enum SFXOnlineXenonPlayerListButtonType
	{
		SFXONLINE_XENON_PLAYERLIST_BUTTON_TYPE_TITLECUSTOM,
		SFXONLINE_XENON_PLAYERLIST_BUTTON_TYPE_PLAYERREVIEW,
		SFXONLINE_XENON_PLAYERLIST_BUTTON_TYPE_GAMEINVITE,
		SFXONLINE_XENON_PLAYERLIST_BUTTON_TYPE_MESSAGE,
	};

	struct SFXOnlineXenonCustomPlayerListButton
	{
		Byte Type; //offset = 0, size = 1
		String CustomText; //offset = 4, size = 12
	};

	class SFXOnlineComponentPlatformXenon: public SFXOnlineComponent
	{
		DECLARE_PACKAGE_CLASS( SFXOnlineComponentPlatformXenon, SFXOnlineComponent, SFXOnlineFoundation )

	public:

		Pointer VfTable_IISFXOnlineComponentPlatform; //offset = 100, size = 4
		Pointer NotificationHandle; //offset = 104, size = 4
		Int NumLogins; //offset = 108, size = 4
		Bool bIsInSignInUI: 1; //offset = 112, size = 4
		Byte LoginStatus[4]; //offset = 116, size = 1
		Int LastInputDeviceConnectedMask; //offset = 120, size = 4
		Array<Pointer> OverlappedTasks; //offset = 124, size = 12

		Bool GetOnlineXuid( Int nUserIndex, UniqueNetId oPlayerXuid );
		Bool GetOfflineXuid( Int nUserIndex, UniqueNetId oPlayerXuid );
		Bool ShowKeyboardUI( Byte LocalUserNum, String sTitleText, String sDescriptionText, Bool bShouldValidate, Bool bRouteThroughConsole, String sDefaultText, Int nMaxResultLength );
		Bool ShowFriendsInviteUI( Byte eLocalUserNum, UniqueNetId oPlayerXuid );
		Bool ShowFriendsUI( Byte eLocalUserNum );
		Bool ShowAchievementsUI( Byte byLocalUserNum );
		Bool ShowFeedbackUI( Byte eLocalUserNum, UniqueNetId oPlayerXuid );
		Bool ShowGamerCardUI( Byte eLocalUserNum, UniqueNetId oPlayerXuid );
		Byte CanShowPresenceInformation( Byte eLocalUserNum );
		Byte CanViewPlayerProfiles( Byte eLocalUserNum );
		Byte CanPurchaseContent( Byte eLocalUserNum );
		Byte CanDownloadUserContent( Byte eLocalUserNum );
		Byte CanCommunicate( Byte eLocalUserNum );
		Byte CanPlayOnline( Byte eLocalUserNum );
		void SetRichPresence( Byte eLocalUserNum, Int nPresenceMode, Array<LocalizedStringSetting> aLocalizedStringSettings, Array<SettingsProperty> aProperties );
		Bool ShowLoginUI( Bool bShowOnlineOnly );
		Byte GetLoginStatus( Byte eLocalUserNum );
		void TickAsyncTasks();
		void OnTick( SFXOnlineEvent* oEvent );
		Bool AddRecentPlayer( UniqueNetId oPlayerId, String sDescription );
		Name GetAPIName();
		void OnRelease();
		void OnInitialize( SFXOnlineSubsystem* oOnlineSubsystem );
	};

	class SFXOnlineComponentPlatformPS3: public SFXOnlineComponent
	{
		DECLARE_PACKAGE_CLASS( SFXOnlineComponentPlatformPS3, SFXOnlineComponent, SFXOnlineFoundation )

	public:

		Pointer VfTable_IISFXOnlineComponentPlatform; //offset = 100, size = 4
		Array<UniqueNetId> PendingRecentPlayers; //offset = 104, size = 12

		Bool GetOnlineXuid( Int nUserIndex, UniqueNetId oPlayerXuid );
		Bool GetOfflineXuid( Int nUserIndex, UniqueNetId oPlayerXuid );
		Bool ShowKeyboardUI( Byte LocalUserNum, String sTitleText, String sDescriptionText, Bool bShouldValidate, Bool bRouteThroughConsole, String sDefaultText, Int nMaxResultLength );
		Bool ShowFriendsInviteUI( Byte eLocalUserNum, UniqueNetId oPlayerXuid );
		Bool ShowFriendsUI( Byte eLocalUserNum );
		Bool ShowAchievementsUI( Byte byLocalUserNum );
		Bool ShowFeedbackUI( Byte eLocalUserNum, UniqueNetId oPlayerId );
		Bool ShowGamerCardUI( Byte eLocalUserNum, UniqueNetId oPlayerId );
		Byte CanShowPresenceInformation( Byte eLocalUserNum );
		Byte CanViewPlayerProfiles( Byte eLocalUserNum );
		Byte CanPurchaseContent( Byte eLocalUserNum );
		Byte CanDownloadUserContent( Byte eLocalUserNum );
		Byte CanCommunicate( Byte eLocalUserNum );
		Byte CanPlayOnline( Byte eLocalUserNum );
		void SetRichPresence( Byte eLocalUserNum, Int nPresenceMode, Array<LocalizedStringSetting> aLocalizedStringSettings, Array<SettingsProperty> aProperties );
		Bool ShowLoginUI( Bool bShowOnlineOnly );
		Byte GetLoginStatus( Byte eLocalUserNum );
		Bool AddRecentPlayer( UniqueNetId oPlayerId, String sDescription );
		void OnTick( SFXOnlineEvent* oEvent );
		Name GetAPIName();
		void OnRelease();
		void OnInitialize( SFXOnlineSubsystem* oOnlineSubsystem );
	};

	class SFXOnlineComponentBlaze: public SFXOnlineComponent
	{
		DECLARE_PACKAGE_CLASS( SFXOnlineComponentBlaze, SFXOnlineComponent, SFXOnlineFoundation )

	public:

		Name GetAPIName();
	};

	enum SFXOnlineComponentBlazeHubEnvironment
	{
		SFXONLINE_BLAZEHUB_ENV_DEV,
		SFXONLINE_BLAZEHUB_ENV_TEST,
		SFXONLINE_BLAZEHUB_ENV_CERT,
	};

	class SFXOnlineComponentBlazeHub: public SFXOnlineComponentBlaze
	{
		DECLARE_PACKAGE_CLASS( SFXOnlineComponentBlazeHub, SFXOnlineComponentBlaze, SFXOnlineFoundation )

	public:

		Pointer VfTable_IISFXOnlineComponentAPI; //offset = 100, size = 4
		String BlazeServiceName; //offset = 104, size = 12
		String BlazeClientName; //offset = 116, size = 12
		Byte BlazeEnv; //offset = 128, size = 1
		Pointer CurrentBlazeHub; //offset = 132, size = 4
		Pointer BlazeNetworkAdapter; //offset = 136, size = 4

		void OnTick( SFXOnlineEvent* oEvent );
		Name GetAPIName();
		Bool ConnectDirtySock();
		void OnRelease();
		void OnInitialize( SFXOnlineSubsystem* oOnlineSubsystem );
	};

	class SFXOnlineComponentBlazeLogin: public SFXOnlineComponentBlaze
	{
		DECLARE_PACKAGE_CLASS( SFXOnlineComponentBlazeLogin, SFXOnlineComponentBlaze, SFXOnlineFoundation )

	public:

		Pointer VfTable_IISFXOnlineComponentLogin; //offset = 100, size = 4
		Pointer VfTable_Blaze::BlazeStateEventHandler; //offset = 104, size = 4
		Pointer VfTable_Blaze::LoginManager::LoginManagerListener; //offset = 108, size = 4
		Pointer ConnectionMgr; //offset = 112, size = 4
		Pointer LoginMgr; //offset = 116, size = 4
		Pointer m_pAuthComponent; //offset = 120, size = 4
		Array<String> m_asEntitlements; //offset = 124, size = 12
		Array<String> m_asGrantedEntitlements; //offset = 136, size = 12
		Byte PendingConnectMode; //offset = 148, size = 1
		Bool PendingConnectSilent: 1; //offset = 152, size = 4
		Bool PendingConnectNucleusRefused: 1; //offset = 152, size = 4
		Bool PendingConnectCerberusRefused: 1; //offset = 152, size = 4
		Bool PendingConnectNucleusSuccessful: 1; //offset = 152, size = 4
		Bool PendingConnectProfileChanged: 1; //offset = 152, size = 4
		Int PendingConnectPreviousRegDays; //offset = 156, size = 4
		Bool PendingConnectAccountCreation: 1; //offset = 160, size = 4
		String PendingConnectEmail; //offset = 164, size = 12
		String PendingConnectPassword; //offset = 176, size = 12
		Int PendingConnectBirthDay; //offset = 188, size = 4
		Int PendingConnectBirthMonth; //offset = 192, size = 4
		Int PendingConnectBirthYear; //offset = 196, size = 4
		String PendingConnectCountryCode; //offset = 200, size = 12
		String PendingConnectLanguageCode; //offset = 212, size = 12
		String PendingConnectParentalEmail; //offset = 224, size = 12
		Bool PendingConnectEAProducts: 1; //offset = 236, size = 4
		Bool PendingConnectThirdParty: 1; //offset = 236, size = 4
		Bool PendingConnectSubscribeBWNewsLetter: 1; //offset = 236, size = 4
		String PendingBuyStoreURL; //offset = 240, size = 12
		Int PendingConnectError; //offset = 252, size = 4
		Int PendingConnectBlazeError; //offset = 256, size = 4
		Array<SFXOfferDescriptor> PendingBuyOffers; //offset = 260, size = 12

		Byte GetConnectionState();
		String ComputeTargetOfferURL( Byte nSource );
		String GetTargetOfferURL();
		Byte CanShowPresenceInformation( Int nUserIndex );
		Byte CanViewPlayerProfiles( Int nUserIndex );
		Byte CanPurchaseContent( Int nUserIndex );
		Byte CanDownloadUserContent( Int nUserIndex );
		Byte CanCommunicate( Int nUserIndex );
		Byte CanPlayOnline( Int nUserIndex );
		void OnDownloadOffersUICompleted();
		void OnDLCInfoLoaded();
		void OpenCerberusUI();
		void EnterCDKey( String sKey );
		void Buy( Byte nPurchaseSource );
		void GrantEntitlement( String sGroup, String sTag );
		Bool CheckEntitlement( String sGroup, String sTag );
		Bool BuildEntitlementList( Bool bFirstCallUponLogin, Int nPage );
		Bool IsCerberusMember();
		void DisablePersona( String sPersonaNonGrata );
		void CreatePersona( String sPersonaName );
		void SelectPersona( String sPersonaName );
		void AcceptTOS( Bool bAccepted );
		void Disconnect();
		void CompleteLoginProcess();
		void StartCerberusLogin();
		void SubmitStore( Array<Int> aiChosen );
		void SubmitCreateNucleusAccountEx( String sEmail, String sPassword, Bool bEAProducts, Bool bThirdParty, Bool bBioWareProducts, String i_sCountryCode, Int BirthDay, Int BirthMonth, Int BirthYear, String i_sLanguageCode, Bool bSubmit );
		void SubmitEmailPasswordMismatch( String Email, String Password, Int eReturnCode );
		void SubmitMessageBox( Int eReturnCode );
		void SubmitRedeemCode( Bool bContinue, String i_sCode );
		void SubmitCerberusWelcomeMessage();
		void SubmitCerberusIntro( Int eReturnCode );
		void SubmitNucleusWelcomeMessage();
		void SubmitCreateNucleusAccount( String sEmail, String sPassword, Bool bEAProducts, Bool bThirdParty, Bool bBioWareProducts, Bool bSubmit );
		void SubmitParentEmail( Bool bContinue, String ParentEmail );
		void SubmitNucleusLogin( String Email, String Password, Byte eReturnCode );
		void SubmitIntroPage( Bool bContinue, Bool bSimulated );
		void Connect( Byte connectMode );
		void GoBackInUI();
		void Cancel();
		UniqueNetId GetUserId();
		String GetPersonaName();
		Bool IsLive();
		Bool IsSignedIn();
		Bool IsConnected();
		void SwitchActiveUserIndex( Int nNewIndex );
		Int GetActiveUserIndex();
		Byte GetLoginStatus();
		Name GetAPIName();
		void OnRelease();
		void OnInitialize( SFXOnlineSubsystem* oOnlineSubsystem );
	};

	struct SFXOnlineMOTDInfo
	{
		String Message; //offset = 0, size = 12
		String Title; //offset = 12, size = 12
		Int Type; //offset = 24, size = 4
		Int Priority; //offset = 28, size = 4
		String Image; //offset = 32, size = 12
		String offerId; //offset = 44, size = 12
		String offerType; //offset = 56, size = 12
	};

	class SFXOnlineComponentBlazeNotification: public SFXOnlineComponentBlaze
	{
		DECLARE_PACKAGE_CLASS( SFXOnlineComponentBlazeNotification, SFXOnlineComponentBlaze, SFXOnlineFoundation )

	public:

		Pointer VfTable_IISFXOnlineComponentNotification; //offset = 100, size = 4
		Pointer m_pBlazeUtil; //offset = 104, size = 4
		Array<SFXOnlineDLCInfo> m_aDLCInfo; //offset = 108, size = 12
		Array<SFXOnlineEntitlementGroupInfo> m_aEntitlementGroups; //offset = 120, size = 12
		Array<SFXOnlineMOTDInfo> m_aMOTDInfo; //offset = 132, size = 12
		SFXOnlineTargetOfferInfo CerberusOfferInfo; //offset = 144, size = 24

		SFXOnlineTargetOfferInfo GetTargetOfferInfo( Byte nSource );
		Array<SFXOnlineEntitlementGroupInfo> GetEntitlementGroups();
		Byte HasUserPurchasedAnOffer( SFXOnline_OfferID aOfferId );
		Bool DownloadOffers( Array<SFXOnline_OfferID> aOfferIds );
		String GetOfferKeyIfEntitled( Int internalId );
		Array<SFXOfferDescriptor> GetGrantingOffers();
		Array<SFXOfferDescriptor> GetEntitledDLCInfo();
		void RefreshEntitlementFlags();
		void SetDaysSinceCerberusRegistration( Int nDays );
		Int GetDaysSinceCerberusRegistration();
		Bool IsCalendarUnlockEarned( Int nDay );
		void RequestEntitlementGroupInfo();
		void RequestDLCInfo( String sNextSection );
		void RequestServerInfo();
		void RequestData();
		Name GetAPIName();
		void OnRelease();
		void OnInitialize( SFXOnlineSubsystem* oOnlineSubsystem );
		void OnTick( SFXOnlineEvent* oEvent );
	};
}

#endif
